home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / cscv.arc / CSVS.DOC < prev    next >
Text File  |  1987-04-20  |  29KB  |  521 lines

  1.                 The Computer Shopper PC Clone Validation Test
  2.                     By Andrew M. Fried & Kenneth McMillen
  3.  
  4. Introduction
  5. ------------
  6. There has never been a better time to purchase an IBM clone microcomputer than 
  7. today.   Overseas  production and fierce competition have  made  the  computer 
  8. consumer master of the industry.
  9.  
  10. There  is  generally  one question facing most  prospective  buyers  of  clone 
  11. computers,  and  that  is  whether  or not the system  is,  in  fact,  a  true 
  12. compatible.
  13.  
  14. Beginning next month, Comupter Shopper will add another program to its list of 
  15. programs  used  to  test a systems compatibility with that of  the  PC.   This 
  16. program, called BIOSTEST, invokes almost all of the ROM BIOS calls and  checks 
  17. them for proper operation.
  18.  
  19. The purpose of this article is to discuss the various interrupts available  in 
  20. ROM BIOS and how they can be checked for compatiblity.
  21.  
  22.  
  23. Interrupt 5 - Print Screen
  24. --------------------------
  25. When  the combination of the Shift-PrtScr keys are  simultaneously  depressed, 
  26. the  ROM  BIOS  generates  an interrupt type 5.   This  interrupt  causes  the 
  27. contents of the screen to be sent to LPT1:.
  28.  
  29. Our  test of this interrupt is simple and straightforward.  To begin  with,  a 
  30. ROM  BIOS  call is made to determine the current video mode.  Once  the  video 
  31. mode is known, the active screen memory is known.
  32.  
  33. The contents of the current screen are saved into a buffer so that they may be 
  34. restored  upon completion of the test.  In order to insure that there  is,  in 
  35. fact, something on the screen to print, a series of printable ASCII characters 
  36. are  generated  and displayed onto the active screen.   These  characters  are 
  37. printed sequentially from chr(32) up to chr(127).
  38.  
  39. BIOSTEST then generates an Interrupt 5.  It becomes the responsibility of  ROM 
  40. BIOS to transfer everything on the screen onto the printer.
  41.  
  42. Once the interrupt has finished, BIOSTEST restores the screen to its  original 
  43. condition and waits for you to press a key to continue.  In order to determine 
  44. whether or not the interrupt functioned properly, you must examine the printer 
  45. output to see if the pattern appears correct.
  46.  
  47.  
  48. Interrupt 10 - Video I/O
  49. ------------------------
  50. ROM-BIOS  has a set of routines which handle various video   functions.  These 
  51. routines set screen modes, move and find the  cursor's position, select active 
  52. graphic  pages,  up/down  scrolling, read/write  characters  with  attributes, 
  53. read/write  dots, and color selections. Some of them are practical if  program 
  54. speed  is not a problem. However if you wish to do some  fancy  graphics  that 
  55. are  quick  then using these routines are not  for you. Their  performance  is 
  56. slow as you will see with the dot  testing. The nicer functions are the screen 
  57. scrolling  and active  page selection. To take advantage of the  graphics  you 
  58. will need  a color monitor.
  59.  
  60. Before  the test begins it checks to see what type of monitor  you are  using. 
  61. If  you  are using a monochrome monitor the program  will only  do  the  tests 
  62. which  apply to a monochrome display.  There are sixteen functions  with  this 
  63. interrupt.  The test will  step through each one and ask you to press any  key 
  64. at  the  end of  each test to continue on to the next one. Some of  the  tests 
  65. will   display a pass or fail message while the rest of them require  you   to 
  66. look at the screen to verify certain conditions. Each of the  tests will  have 
  67. a header at the top of the screen to let you know  what is being tested.
  68.  
  69. The first test that is tried is the verification of a table  in ROM-BIOS  that 
  70. contains video initialization parameters. When  you boot your system or  power 
  71. it  on the built in diagnostics look  at the switch settings for  the  monitor 
  72. type  and set up the video  card with the correct parameters from this  table. 
  73. If  one of the  parameters do not match then the test fails. This table  needs 
  74. to  match 100% if you system is to be compatible.
  75.  
  76. The next test deals with setting screen modes. If you are  using a  monochrome 
  77. display  then there is only one mode. For the  color display there  are  seven 
  78. different modes. You should see  each of the seven modes set (40x25 BW,  40x25 
  79. color, 80x25 BW,  80x25 color, 320x200 color, 320x200 BW, and 640x200 BW).
  80.  
  81. Using  this next function you can set up your cursor type.  In the  monochrome 
  82. mode  your cursor is made up of thirteen lines  whereas in the color mode  you 
  83. have  just seven. If you use this  function it needs the starting  and  ending 
  84. line.  This test should  display a solid cursor, starting at cursor line  zero 
  85. and ending  at seven or thirteen. 
  86.  
  87. The  next two tests position and read the cursor's location.  The  first  test 
  88. positions  the cursor at row four, column twelve  and prints the  letter  'X'. 
  89. You  need  to verify this by looking at  the screen. The other test  does  the 
  90. same  thing and then reads  the location of the cursor which should be at  row 
  91. four,  column  thirteen. On the screen you should see the blinking  cursor  at  
  92. this position. Press any key when you have finished with each  test.
  93.  
  94. Function  number  four of this interrupt reads the position of  a  light  pen. 
  95. This test was not included since most everyone does  not have a light pen.
  96.  
  97. Function number five selects the active page to display. To  fully utilize all 
  98. of  the memory on the video card IBM included  this function which  gives  you 
  99. multiple  pages  of text. In a 40x25  screen mode you have a  total  of  eight 
  100. pages of text that you  could flip through if your application takes advantage 
  101. of  this.   In an 80x25 mode you get just four since you are  using  twice  as  
  102. much  video  memory. This function works only with color displays.   The  test 
  103. will  first  use  the 80x25 mode and fill up all four  pages   with  the  page 
  104. number. Then the test will ask you to press any  key to flip through the  four 
  105. pages verifying that each screen  page is filled with the proper page  number. 
  106. If so then this test  passes.
  107.  
  108. The  next  two tests test the scrolling functions. The first   one  fills  the 
  109. screen with text and scrolls up a window of text.  The second on does the same 
  110. except it scrolls down a window of  text. If you see this happen then both  of 
  111. these tests pass. You  can also see what the character set will look like. 
  112.  
  113. The  next  three tests deal with the character handling  routines.  The  first 
  114. will  display  a  test  pattern made up  of  all   the  attribute  capabilites 
  115. (underline,  color,  blinking...). The  test will read the  pattern  from  the 
  116. screen  and  if  it matches the  test passes. The next test  writes  the  test 
  117. pattern  on  the screen  and then it is read back to verify that  the  pattern 
  118. matches.  If   so then this test passes. The third test also writes  the  test  
  119. pattern  to the screen but without any of the attributes so what   you  should 
  120. see  is text displayed normally. A trade off with the  attributes is that  you 
  121. have  the underline capability only with  the monochrome and color  only  with 
  122. the color display.
  123.  
  124. Functions eleven, twelve, and thirteen are used for  graphics. Function eleven 
  125. sets  the  color palette. The test  should cycle through sixteen  colors.  You 
  126. will  need to verify  this. Function twelve handles writing dots or pixels  to 
  127. the  screen at a particular row and column. The test should draw a  box on the 
  128. screen. To verify that the test did this it will read  back all the dots which 
  129. make up the box, please be patient while  the test does this. If they are  all 
  130. read  back  successfully  then  the test  passes.  Function  thirteen  handles 
  131. reading  the  color  of   a dot at some position.  This  test  should  draw  a 
  132. different box  and if the test reads back each dot that the box is made up  of  
  133. then the test passes. 
  134.  
  135. Function fourteen handles writing characters to the screen  and is similar  to 
  136. the functions describe above which handle  characters. This test uses the same 
  137. test  pattern  as used in the  above test. If the test pattern  is  read  back 
  138. correctly then the  test passes.
  139.  
  140. The  last test of the video I/O tests the current video  state. Since it  gets 
  141. its  results from a reserved area in memory,  for storing system  information, 
  142. this is where the test was  performed. Most applications use this data area to 
  143. get  system  parameters. If this area is not identical and maintained to  that  
  144. of  an IBM machine then compatability might prove to be a problem.  This  test 
  145. first  saves  the  current values and replaces them  with   test  values.  The 
  146. function is executed to see if it returns the  test values and if it does then 
  147. the test passes. When the test  finishes, it will restore the current values. 
  148.  
  149.  
  150. Interrupt 11 - Equipment Determination 
  151. --------------------------------------
  152. There  are  some software packages that can determine the type   of  equipment 
  153. your  system  is using. One of the most obvious  reasons for this  is  that  a 
  154. program  which  displays graphics will  not work so well if  your  monitor  is 
  155. monochrome.  So  the program  will look to see what type of  monitor  you  are 
  156. using  and execute  it's code to handle a monochrome monitor. That way if  the  
  157. program is not dependent on using graphics, it will still  operate. 
  158.  
  159. When  you turn on your PC, a set of built in diagnostics are  run  to  quickly 
  160. test the condition of your system. The  diagnostics must know what to test. It 
  161. reads the switch settings  you set on the motherboard for the type of monitor, 
  162. amount  of  memory, etc. and stores those settings in a system data  area.  If  
  163. your  program requires this information then you would execute  an   interrupt 
  164. 11. This interrupt reads the settings from the data  area rather than from the 
  165. actual  switch settings on the  motherboard. Since most programs will  extract 
  166. the  switch   settings from the system data area, this is where the  test  was  
  167. performed.
  168.  
  169. The test first of all saves the current switch settings  stored in the  system 
  170. data area. It then replaces this value with  a test value. An interrupt 11  is 
  171. executed  to  find out if it  returned the test value. If so,  then  the  test 
  172. passes.  After  the  test has finished, the current switch settings  value  is 
  173. restored   back to the system data area. You could actually fool your   system 
  174. by changing the switch settings value in this data area. 
  175.  
  176. Interrupt 11 returns the switch setting value in the AX  register. Each of the 
  177. bits in this register indicate the  following:
  178.  
  179.      bit 0 - indicates diskette drives on the system 
  180.      bit 1 - not used
  181.      bit 3,2 - planar ram size 
  182.                (00 = 16K, 01 = 32K, 10 = 48K, 11 = 64K) 
  183.      bit 5,4 - initial video mode
  184.                00 = unused
  185.                01 = 40 x 25 black/white using a color card
  186.                10 = 80 x 25 black/white using a color card
  187.                11 = 80 x 25 black/white using a monochrome card
  188.      bit 7,6 - number of diskette drives if bit 0 set 
  189.                (00 = 1, 01 = 2, 10 = 3, 11 = 4) 
  190.      bit 8 - not used
  191.      bit 11,10,9 - number of RS-232 ports 
  192.      bit 12 - game input/output port installed
  193.      bit 13 - not used
  194.      bit 15,14 - number of printer ports 
  195.                (00 = 1, 01 = 2, 10 = 3, 11 = 4) 
  196.   
  197.  
  198. Interrupt 12 - Memory Size Determination 
  199. ----------------------------------------
  200. When  you  purchase  a  software  program,  it  usually  will  state  in   the 
  201. documentation  the amount of memory the program requires to run  successfully. 
  202. If  you have tried running a program which requires more memory than you  have 
  203. available  then you might get  the message "INSUFFICIENT MEMORY". The  program 
  204. most likely has  used interrupt 12 to first look at the amount of memory  your  
  205. system has available before trying to load the main program.  This will  avoid 
  206. the possibility of crashing your system and  leaving you in frustration as  to 
  207. what went wrong.
  208.  
  209. The  memory  size is determined when your system is powered  on or  when  your 
  210. system is booted up. In the system data area  there is a place which keeps the 
  211. amount  of  memory your system has  installed. This  determination  is  stored 
  212. there.  When  an   interrupt 12 is executed, it reads  this  value.  What  the  
  213. interrupt returns is the number of contiguous 1K blocks of  memory. 
  214.  
  215. The  test  saves the current memory size and replaces it with  a  test  value. 
  216. Then an interrupt 12 is executed to see if it  returns the test value. If  the 
  217. test  value is returned then the  test has passed. After the test is  complete 
  218. the current memory  size is restored. 
  219.  
  220.  
  221. Interrupt 13 - Diskette Drive Interface 
  222. ---------------------------------------
  223. The  low  level  software interface between your diskette  drive   and  system 
  224. memory  is the ROM-BIOS interrupt 13. It handles the  most basic operation  of 
  225. moving data between your program and the  diskette. This interrupt is made  up 
  226. of  six basic functions  (reset the drive, getting the status of  the  drive's 
  227. operation,   reading  data, writing data, verifying data, and  formatting  the  
  228. diskette). DOS is very much dependent upon this interrupt. 
  229.  
  230. Since  DOS depends on this interrupt to function properly you  can do some  of 
  231. your  own  testing by loading and executing a  program, writing  data  to  the 
  232. diskette, and formatting a diskette.  This will cover all six of the functions 
  233. listed  above.  If you  can perform these type of  functions,  without  errors 
  234. being   generated, then you have successfully tested this interrupt and   know 
  235. whether  compatibility  is a problem. You would also want to  try  and  use  a 
  236. program off of a diskette that was formatted and  setup on an IBM-PC or  known 
  237. compatible system. 
  238.  
  239. The  interrupt  13 test consists of first placing a formatted,   double  sided 
  240. diskette into drive A with, better yet, some  information stored on it.  Since 
  241. a majority of the diskette  drives around now are double sided, this test will 
  242. test  both   sides of the diskette only. Once the diskette is  in  place  then  
  243. press  any  key to continue. The test begins by reseting the  drive.  Then  it 
  244. does a series of read/write tests and gets the  drive's status for both  sides 
  245. of the disk, on all forty tracks. 
  246.  
  247. If  an error occurs, then an error message will be displayed   indicating  the 
  248. type  of failure. The error messages are based on  the error codes  listed  in 
  249. ROM-BIOS. If one of the tests fail  they are retried two more times to  verify 
  250. the error. DOS does a  better job of determining errors since that is what  it 
  251. was   designed to do. You may then proceed with the testing of the   remaining 
  252. tracks by pressing any key. 
  253.  
  254. After  all forty tracks have been tested then the next test,  verification  of 
  255. data,  is  executed. To exercise the movement of  the heads also  ,  the  test 
  256. begins on the outside track, track  zero, then moves to the inside, back  out, 
  257. back in, until the  center track is reached and tested. Errors are handled  in 
  258. the  same way as the previous read/write tests. 
  259.  
  260. Displayed  on the screen, while the test is running, is a  status  line  which 
  261. shows  you the drive being tested, the current  track, the head or  side,  the 
  262. starting sector and the number of  sectors involved in the test. This test  is 
  263. performed  on drive A,  drive zero, only and works with an entire track,  nine 
  264. sectors, at  a time. When the verify test is running you can watch the  drives  
  265. head  movement by looking at the current track it is on. After  the  test  has 
  266. finished you will see the test pass or fail message.  If just one error occurs 
  267. then the whole test is considered a  failure. 
  268.  
  269.  
  270. Interrupt 14 - Async Communications
  271. -----------------------------------
  272. While  the  ROM BIOS provides support for the serial ports,  most  programmers 
  273. requiring the use of these ports routinely bypass BIOS and work directly  with 
  274. the  hardware.  This is due to the fact that BIOS support for these  ports  is 
  275. minimal, at best.
  276.  
  277. The  ROM BIOS specifically provides four support services to the  asynchronous 
  278. ports:initialize  port, send a character from port, receive a  character  from 
  279. port and return status of com port.  Most communications programs will utilize 
  280. only  service 0 (initialize port) since interrupt driven routines,  which  are 
  281. not  directly  supported  under BIOS, are the  preferred  method  of  handling 
  282. incoming data.
  283.  
  284. For  this  reason, this test will run through diagnostics of service  0  only.  
  285. Various baud rates are initialized using BIOS.  This diagnostic then goes into 
  286. the UART chip itself to ascertain that the correct timing parameters were sent 
  287. from BIOS.
  288.  
  289. This test will display the various baud rates set along with the number  which 
  290. was  found in the divisor latch.  If they correspond with the  correct  value, 
  291. the test will pass.
  292.  
  293. This test will only be performed on COM 1.
  294.  
  295.  
  296. Interrupt 16 - Keyboard
  297. -----------------------
  298. There are actually two different interrupts used to support the keyboard.  One 
  299. interrupt (interrupt 9) is used primarily for low level support of the  serial 
  300. transmissions  from the keyboard.  This interrupt is not generally invoked  by 
  301. user written software.
  302.  
  303. The other keyboard interrupt, which is often referred to as the "read keyboard 
  304. support",  is interrupt 16.  This is the keyboard interrupt accessed  by  most 
  305. user software programs.  
  306.  
  307. As you could imagine, interrupt 16 could not function properly if interrupt  9 
  308. failed to perform its duties.  For this reason, BIOSTEST concerned itself with 
  309. interrupt 16.  Interrupt 9 is not directly tested by the validation program.
  310.  
  311. Under  interrupt type 16 there are three services available.  Service 0  reads 
  312. the next character entered into the keyboard and returns the code and its scan 
  313. code in the CPU registers.  
  314.  
  315. Service  1 is invoked simply to tell us whether or not a key has been  entered 
  316. and  is  waiting in the keyboard buffer for processing.   Finally,  service  2 
  317. returns the status of the shift keys.
  318.  
  319. In order to test these services, information was placed into the ROM BIOS data 
  320. area.  Since the interrupt itself uses the data area to store information from 
  321. the  keyboard,  simple  memory manipulations are  performed  which  trick  the 
  322. keyboard  into  thinking that keys were pressed which,  in  reality,  weren't.  
  323. This enables us to check the ROM BIOS without addressing the physical keyboard 
  324. itself.
  325.  
  326. For  example, by adding a character into the keyboard buffer and changing  one 
  327. simple  pointer, the BIOS thinks that a key is waiting to be processed.   When 
  328. service  0 is subsequently called, it should return indicating a character  is 
  329. waiting.
  330.  
  331.  
  332. Interrupt 17 - Parallel Printer Port
  333. ------------------------------------
  334. Just  as in the case with the serial port, the parallel port is  supported  by 
  335. ROM  BIOS even though the device itself is not part of the motherboard.   This 
  336. means  that the system may support a device that is not even attached  to  the 
  337. system.
  338.  
  339. This  interrupt  contains three separate service routines.   Service  0  sends 
  340. characters  out the port one at a time to the printer.  Service 1 is  used  to 
  341. intialize the printer port and service 2 returns the printer status.
  342.  
  343. BIOSTEST  primarily  invokes  these routines.  It is up  to  the  operator  to 
  344. determine  whether or not the hardware is responding correctly.  For  example, 
  345. under  service  0  a  test pattern of printable characters  is  sent  out  the 
  346. parallel  port using interrupt 17.  To ascertain the correctness of the  call, 
  347. it is necessary to visually examine the output.  
  348.  
  349. Service  1  merely initializes the port.  The only testing performed  on  this 
  350. service  is to examine the return code for inconsistencies after the  call  is 
  351. made.
  352.  
  353. Service 2, which returns the printer status, is easily verified by  performing 
  354. such  tricks  as taking the printer offline and then invoking  the  test.   If 
  355. working properly, BIOSTEST will indicate the condition to you.
  356.  
  357.  
  358. Interrupt 18 - Invoke ROM-BASIC
  359. -------------------------------
  360. If  you don't have a fixed disk attached to your system, chances are  at  some 
  361. time  or another you booted up your system without a disk in the  drive.   The 
  362. result  was  that  the  machine finally enters  ROM-BASIC.   Entry  into  this 
  363. firmware version of Basic is made possible by interrupt 18.
  364.  
  365. I do not know of any clone that has Basic installed in ROM.  Microsoft wrote a 
  366. generic Basic language for clones which emulates IBM's ROM-BASIC however it is 
  367. a software only version of the language.  I'm referring to GWBASIC, of course.
  368.  
  369. For  completness,  however, BIOSTEST includes this test.  When  this  test  is 
  370. performed, an interrupt 18 is invoked which, on an IBM, should call up the ROM 
  371. resident version of Basic.  
  372.  
  373. Do  not  expect this test to perform correctly on clones.  It  is  even  quite 
  374. possible that the machine may totally hose up when this call is made.  
  375.  
  376.  
  377. Interrupt 19 - Boot Strap Loader
  378. --------------------------------
  379. As  soon as the computer is turned on, ROM BIOS begins initializing  the  data 
  380. area  and  performing  diagnostic tests.  At the conclusion  of  these  tests, 
  381. control is turned over to the boot strap loader via interrupt 19.
  382.  
  383. This  routine  will simple invoke the interrupt 19 code.  When  this  happens, 
  384. your  computer should simple perform a complete reboot as would occur had  you 
  385. just turned your system on.
  386.  
  387. Interestingly enough, not all systems seem to respond this interrupt the same.  
  388. In particular, hard disk based systems will sometimes 'hang' when this test is 
  389. performed.   In  general, however, if your system comes up from  a  power  off 
  390. condition, the system should be considered ok.  This test is optional and  not 
  391. a  true  gage of compatibility.  It was included in BIOSTEST for the  sake  of 
  392. completness.
  393.  
  394.  
  395. Interrupt 1A - Time of Day
  396. --------------------------
  397. Around 6:30 every morning, we all feel as though our lives are controlled by a 
  398. clock.  Well, we have at least one thing in common with a computer!
  399.  
  400. In the case of the PC, the second hand of the clock is advanced  approximately 
  401. 18.2  times  every  second.  For you techies out  there,  the  strange  timing 
  402. interval is the result of a 1.2 mHz clock divided with a counter by 65536.
  403.  
  404. At  each advance, a register is incremented.  Determining the actual  time  is 
  405. therefor a matter of transforming this count into something more meaningful by 
  406. us  mortals.  ROM BIOS doesn't give us the upper level support to do  this;  a 
  407. service request under DOS interrupt 21 does, however.
  408.  
  409. What  ROM  BIOS does give us, however, is the ability to  read  the  so-called 
  410. clock and to set the clock.  These facilities fall under interrupt 1A services 
  411. 0 and 1 respectively.
  412.  
  413. This  test  will read the hardware registers and then perform a bios  call  to 
  414. read the registers.  If they are identical, the test passes.  
  415.  
  416. The second test performs just the opposite; a new value is set into the clock.  
  417. Once done, the hardware is examined to see if the call was successful.  Should 
  418. the registers differ, a failure warning will be issued.
  419.  
  420.  
  421. Printout of ROM BIOS Data Area
  422. ------------------------------
  423. ROM BIOS is contained on non-volatile memory.  As such, it does not change, it 
  424. need  not be reloaded every time the system is powered up an can operate  much 
  425. faster than the volatile memory chips affectionately referred to as RAM.
  426.  
  427. This is all well and good, but in order to operate certain variables that  are 
  428. used  by ROM BIOS must be able to change.  To accomodate this, a certain  area 
  429. of  RAM memory was set aside specifically for ROM BIOS support.  This area  is 
  430. called the ROM BIOS data area.
  431.  
  432. There  is a wealth of information stored within these areas.  As a  matter  of 
  433. fact,  it  is very common for software packages to examine  certain  locations 
  434. within this area for information pertinent to the operation of the program.
  435.  
  436. If  you  were to examine a technical manual which lists the  actual  ROM  BIOS 
  437. (such  as the IBM Technical Reference Manual), each variable in this area  has 
  438. been  assigned a label.  This procedure produces a hardcopy listing of all  of 
  439. the  data located within this data area and displays it along with its  actual 
  440. name as it appears within the tech manual.
  441.  
  442. This utility is very useful for comparing certain values contained within  the 
  443. data  area  from  those  of the real thing.  In order  to  get  the  printout, 
  444. however, a printer must be attaced to your system.
  445.  
  446.  
  447. The Romdate Utility
  448. -------------------
  449. Hidden  deep  within  the  recesses  of most ROM  BIOS  are  three  fields  of 
  450. information  which you might find of interest.  These fields include the  type 
  451. computer system, the date of the ROM BIOS and the copyright notice.
  452.  
  453. The  field  containing the type of computer is important  since  many  machine 
  454. specific programs examine that memory location in order to determine the  host 
  455. computers  configuration.   Rather than return a  meaningless  code,  BIOSTEST 
  456. returns the type system identified by the system code.
  457.  
  458. Another  location within the ROM BIOS has historically been used to provide  a 
  459. date stamp for the ROM BIOS itself.  BIOSTEST will display this date.
  460.  
  461. Finally, a third location yields an ASCII string which consists of a copyright 
  462. notice.  This is really quite interesting (and important, as well).  There are 
  463. some  software packages that specifically test this area in order to find  the 
  464. three  magic  characters "IBM".  This was supposedly done to  prevent  certain 
  465. software from running on clones.
  466.  
  467. In order to maintain compatibility, software houses producing ROM BIOS decided 
  468. to install their own copyright notice which also contains the magical letters.  
  469. Some are quite humorous and may range from "IBM compatible" to "This is not an 
  470. IBM...".
  471.  
  472. This utility will print the first 60 or so ASCII characters found in the  area 
  473. traditionally reserved for such purposes.
  474.  
  475.  
  476. The Romcheck Utility
  477. --------------------
  478. ROM  BIOS  is actually nothing more than a collection of  software  procedures 
  479. which  have been stored inside the computer non-volatile memory.  Software  of 
  480. this nature is referred to as "firmware".
  481.  
  482. Many  systems contain other devices not directly supported by either  the  ROM 
  483. BIOS  or  DOS.   Two such examples that are most common  are  the  fixed  disk 
  484. extension  to  interrupt  13 and the Enhanced Graphics  Adapter  extension  to 
  485. interrupt  10.   In  order to provide support for  these  devices,  the  cards 
  486. themselves contain either ROMS or EPROMS containing the firmware necessary  to 
  487. support that device.
  488.  
  489. During  a power on self test, the ROM BIOS tests certain areas of  memory  for 
  490. these ROMS and, if located, pass control to these programs.  The programs,  in 
  491. turn,  create the necessary hooks into the operating system which  enable  the 
  492. device to function.
  493.  
  494. This utility will scan the computers memory from C000:0000 up to F400:0000  in 
  495. search of these ROMS.  Should a ROM be found, its address will be displayed on 
  496. the screen.
  497.  
  498. The  most  common ROM will be found at address C800:0000.  This  ROM  provides 
  499. support  for the fixed disk.  EGA cards, on the other hand, will generally  be 
  500. found at C000:0000.
  501.  
  502.  
  503. Conclusion
  504. ----------
  505. The  program  BIOSTEST  is an attempt on our part to provide  a  standard  and 
  506. meaningful test to ascertain a PC clones compatibility to its predecessor, the 
  507. IBM PC.
  508.  
  509. In  developing  our  test, we tried to  simulate,  wherever  possible,  actual 
  510. situations where the ROM BIOS would or could be invoked.  Our tests are simple 
  511. yet quite through.
  512.  
  513. There is, of course, the possibility that an unknown bug or glitch in the  ROM 
  514. BIOS  could  go  undetected by BIOSTEST.  To  remove  this  possibility  would 
  515. require  programming effort in excess of that used to originally develope  the 
  516. BIOS itself!
  517.  
  518. Quite frankly, there are few systems in the market today whose ROM BIOS is not 
  519. compatible.   Our program will help to identify the small minority of  systems 
  520. containing a flawed ROM BIOS.
  521.